package com.company.ljh.easy;
//给定一个只包括 '('，')'，'{'，'}'，'['，']' 的字符串 s ，判断字符串是否有效。
//
// 有效字符串需满足：
//
//
// 左括号必须用相同类型的右括号闭合。
// 左括号必须以正确的顺序闭合。
//
//
//

//
// 示例 1：
//
//
//输入：s = "()"
//输出：true
//
//
// 示例 2：
//
//
//输入：s = "()[]{}"
//输出：true
//
//
// 示例 3：
//
//
//输入：s = "(]"
//输出：false
//
//
// 示例 4：
//
//
//输入：s = "([)]"
//输出：false
//
//
// 示例 5：
//
//
//输入：s = "{[]}"
//输出：true
//
//
//
// 提示：
//
//
// 1 <= s.length <= 104
// s 仅由括号 '()[]{}' 组成
//
// Related Topics 栈 字符串
// 👍 3100 👎 0

import java.util.Stack;

/**
 * @description:
 * @projectName:leet_code
 * @see:com.company.ljh.easy
 * @author:ljh
 * @createTime:2022/3/21 15:29
 * @version:1.0
 */
public class 有效的括号 {
    public static boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        if (null == s||s.length()==0){
            return false;
        }
        for (char c:s.toCharArray()){
            if (c == '[' || c=='{'||c=='('){
                stack.push(c);
            }
            else if (c==']'||c=='}'||c==')'){
                if (stack.isEmpty()){
                    return false;
                }
                Character pop = stack.pop();
                if (c == ']'){
                    if (pop!='['){
                        return false;
                    }
                }else if (c == '}'){
                    if (pop!='{'){
                        return false;
                    }
                }else if (c == ')'){
                    if (pop!='('){
                        return false;
                    }
                }
            }
        }
        if (stack.isEmpty()){
            return true;
        }else {
            return false;
        }
    }
    public static void main(String[] args) {
        boolean valid = isValid("({{[[]]}})");
        System.out.println(valid);
    }
}
